#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	//一、条件操作符(三目操作符)
	//语法: exp1?exp2:exp3 (exp为表达式)
	//结果:exp1为真就执行exp2，exp1为假就执行exp3
	//相当于:if(exp1){exp2} else{exp3}  (就是用于较为简单的判断)
	
	//三目操作符也会返回一个值:
	//int a = (4 > 6) ? 10 : 20;
	//printf("a=%d\n", a);
	
	//练习：使用条件表达式实现找出两个数中的最大值
	//int a = 0;
	//int b = 0;
	//scanf("%d%d", &a, &b);
	//int max = 0;
	//max = (a > b) ? a : b;
	//printf("最大值为:%d\n", max);



	//二、逻辑操作符:
	//1. ! :逻辑取反运算符（改变单个表达式的真假）
	//int flag = 0;
	//scanf("%d", &flag);
	//flag == 0 ? printf("do something\n") : 1;
	//!flag ? printf("do something\n") : 1;
	//上下两个等效，都表示如果flag为假就输出，flag为真就不输出
	
	//2. && :逻辑与运算符(并且)

	//3. || ：逻辑或运算符(或者)

	//4.练习:闰年的判断:
	//规则:1.能被4整除并且不能被100整除的是闰年
	//     2.能被400整除的是闰年
	//int year = 0;
	//printf("请输入年份:");
	//scanf("%d", &year);
	//if ((year % 4 == 0 && year % 100 != 0)||(year%400==0))
	//{
	//	printf("%d是闰年\n", year);
	//}
	//else
	//{
	//	printf("%d不是闰年\n", year);
	//}

	//5.短路:
	//C语言中总是先对左侧的表达式求值，然后再对右边的表达式求值，如果左边的表达式满足逻辑运算符的条件，就不在对右边的表达式求值
	//int i = 0, a = 0, b = 1, c = 2;
	//i = a++ && ++b && c++;//a已经是假，不会再执行后面两个表达式
	//printf("a=%d,b=%d,c=%d\n", a, b, c);
	//printf("i=%d", i);
	//逻辑运算符或||同理
	


	//三、switch语句:
	//用于判断条件有多个结果的时候,把多重的else if改成可读性更好的形式
	//注意:表示的结果必须是整型。字符类型也算是整型家族
	//case后的值，必须是整型常量表达式
	//switch和if的对比:
	
	//1.if:
	//int n = 0;
	//scanf("%d", &n);
	//if (n % 3 == 0)
	//	printf("余数是0");
	//else if (n % 3 == 1)
	//	printf("余数是1");
	//else if (n % 3 == 2)
	//	printf("余数是2");

	//2.swicth:
	//int n = 0;
	//scanf("%d", &n);
	//switch (n % 3)//计算出的结果是整型值可以用switch,因为case后面必须是整型常量
	//{
	//case 0:
	//	printf("余数是0");
	//	break;//没有break的话会一直向下执行
	//case 1:
	//	printf("余数是1");
	//	break;
	//case 2:
	//	printf("余数是2");
	//	break;
	//}
	
	//练习:
	//输入1~7，打印是工作日还是休息日
	//int n = 0;
	//scanf("%d", &n);
	//switch (n)
	//{
	//case 1:
	//case 2:
	//case 3:
	//case 4:
	//case 5:
	//	printf("工作日");
	//	break;
	//case 6:
	//case 7:
	//	printf("休息日");
	//	break;
	//default:
	//	printf("输入数字有误，请输入1~7的数字");
	//}
	
	//四、while(表达式)
	// 语句 //如果循环体想要有多条语句可以加上大括号
	//练习:打印1~10:
	//int i = 1;
	//while (i < 11)
	//{
	//	printf("%d\n", i);
	//	i++;
	//}

	//练习:输入一个正的整数，逆顺序打印这个整数的每一位
	//int n = 0;
	//scanf("%d", &n);
	//while (n != 0)
	//{
	//	printf("%d", n % 10);//个位
	//	n = n / 10;
	//}



	//五、for循环:
	//for(exp1;exp2;exp3) //exp1:初始化,exp2:判断,exp3:调整
	// 语句	
	//练习:打印1~10
	//for (int i = 1; i < 11; i++)
	//	printf("%d  ", i);
	
	//练习:
	//计算1~100之间3的倍数之和
	//	int sum = 0;
	//	for (int i = 1; i < 101; i++)
	//	{
	//		if (i % 3 == 0)
	//		{
	//			int n = i;
	//			sum += n;
	//		}
	//	}
	//	printf("%d", sum);



	//六、do while循环:
	//打印1~10:
	//int i = 1;
	//do
	//{
	//	printf("%d  ", i);
	//	i++;
	//} while (i < 11);

	//输入一个整数，计算这个数字是几位数
	//int n = 0;
	//int count = 0;
	//scanf("%d", &n);
	//do
	//{
	//	count++;
	//	n = n / 10;
	//} while (n != 0);
	//printf("%d", count);
	return 0;
}





